package com.hbt.android.kotlin

import android.app.Activity
import android.content.Intent
import android.content.res.ColorStateList
import android.graphics.Color
import android.os.Bundle
import android.os.PersistableBundle
import android.util.Log
import android.view.Gravity
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentTransaction
import com.google.android.material.button.MaterialButton
import com.hbt.android.kotlin.learn.boolean
import com.hbt.android.kotlin.service.LearnService
import com.hbt.android.kotlin.ui.learn.LearnFragment
import kotlinx.android.synthetic.main.activity_learn.*

class LearnActivity: AppCompatActivity() {

    private val TAG = "LearnActivity"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Log.e(TAG, "onCreate ->")
        Log.e(TAG, "该方法会在 Activity 第一次创建时进行调用，在这个方法中通常会做 Activity 初始化相关的操作，例如：加载布局、绑定事件等。")

        setContentView(R.layout.activity_learn)
        toggle_group.addOnButtonCheckedListener { group, checkedId, _ ->
            val childCount = group.childCount
            var selectIndex = 0
            for (index in 0 until childCount) {
                val childAt = group.getChildAt(index) as MaterialButton
                if (childAt.id == checkedId) {
                    selectIndex = index
                    childAt.setTextColor(Color.RED)
                    childAt.iconTint = ColorStateList.valueOf(Color.RED)
                } else {
                    childAt.setTextColor(Color.BLACK)
                    childAt.iconTint = ColorStateList.valueOf(Color.BLACK)
                }
            }
            switchFragment(selectIndex)
        }
        toggle_group.check(R.id.tab1)

        /* activity交互测试 */
        // 接收的参数
//        val request_code = intent.getIntExtra("request_code", 0)
//        val request_msg = intent.getStringExtra("request_msg")
//        val textView = TextView(this)
//        textView.text = "LearnActivity ${request_code}, ${request_msg}"
//        textView.gravity = Gravity.CENTER
//        setContentView(textView)
//        // 返回给请求的activity
//        textView.setOnClickListener{
//            val resultIntent = Intent()
//            resultIntent.putExtra("response_code", 200)
//            resultIntent.putExtra("response_msg", "response")
//            setResult(Activity.RESULT_OK, resultIntent)
//
//            // 关闭activity
//            finish()
//        }


        /* fragment测试 */
//        setContentView(R.layout.activity_learn)
//        // 在Activity中使用supportFragmentManager管理Fragment，添加到页面上
//        val learnFragment = LearnFragment()
//        // 创建bundle对象，并填充数据赋值给fragment的arguments字段
//        val bundle = Bundle()
//        bundle.putInt("code", -1)
//        bundle.putString("msg", "LearnActivity 传递给 LearnFragment 的参数")
//        learnFragment.arguments = bundle
//        val ft:FragmentTransaction = supportFragmentManager.beginTransaction()
//        // 把fragment添加到事务中，当且仅当该fragment未被添加过
//        if (!learnFragment.isAdded) {
//            ft.add(R.id.container, learnFragment)
//        }
//        // 显示出fragment视图
//        ft.show(learnFragment)
//        // 隐藏
//        ft.hide(learnFragment)
//        // 移除
//        ft.remove(learnFragment)
//        // 替换fragment
//        ft.replace(R.id.container, learnFragment)
        // 提交事务
//        ft.commitAllowingStateLoss()




    }

    private var tab1Fragment:LearnFragment? = null
    private var tab2Fragment:LearnFragment? = null
    private var tab3Fragment:LearnFragment? = null
    private var showFragment:Fragment? = null
    private fun switchFragment(selectIndex: Int) {
        Log.e(TAG, "switchFragment ->")

        val fragment = when (selectIndex) {
            0 -> {
                if (tab1Fragment == null) {
                    tab1Fragment = LearnFragment()
                    val bundle = Bundle()
                    bundle.putString("tab", "tab1")
                    tab1Fragment!!.arguments = bundle
                }
                tab1Fragment
            }
            1 -> {
                if (tab2Fragment == null) {
                    tab2Fragment = LearnFragment()
                    val bundle = Bundle()
                    bundle.putString("tab", "tab2")
                    tab2Fragment!!.arguments = bundle
                }
                tab2Fragment
            }
            2 -> {
                if (tab3Fragment == null) {
                    tab3Fragment = LearnFragment()
                    val bundle = Bundle()
                    bundle.putString("tab", "tab3")
                    tab3Fragment!!.arguments = bundle
                }
                tab3Fragment
            }
            else -> {
                throw IllegalStateException("下标不符合预期")
            }
        } ?: return
//        fragment?.let {
//            // 把fragment添加到视图容器中,并显示出来，还要把之前已经显示的hide隐藏掉，否则会重叠
//            val ft: FragmentTransaction = supportFragmentManager.beginTransaction()
//            if (!it.isAdded) {
//                ft.add(R.id.container, fragment)
//            }
//            if (primaryFragment != null) {
//                ft.hide(primaryFragment!!)
//            }
//            ft.show(fragment)
//            ft.commitAllowingStateLoss()
//            primaryFragment = fragment
//        }


        val ft = supportFragmentManager.beginTransaction()
        // 把fragment添加到事务中，当且仅当该fragment未被添加过
        if (!fragment.isAdded) {
            ft.add(R.id.container, fragment)
        }

        ft.show(fragment)
        if (showFragment != null) {
            ft.hide(showFragment!!)
        }
        showFragment = fragment
        ft.commitAllowingStateLoss()

    }


    override fun onStart() {
        super.onStart()
        Log.e(TAG, "onStart ->")
        Log.e(TAG, "这个方法会在 Activity 由不可见变为可见的时候调用，但是还不能和用户进行交互。")
    }

    override fun onResume() {
        super.onResume()
        Log.e(TAG, "onResume ->")
        Log.e(TAG, "表示Activity已经启动完成，进入到了前台，可以同用户进行交互了。")
    }

    override fun onPause() {
        super.onPause()
        Log.e(TAG, "onPause ->")
        Log.e(TAG, "这个方法在系统准备去启动另一个 Activity 的时候调用。可以在这里释放系统资源，动画的停止，不宜在此做耗时操作。")
    }

    override fun onStop() {
        super.onStop()
        Log.e(TAG, "onStop ->")
        Log.e(TAG, "当Activity不可见的时候回调此方法。需要在这里释放全部用户使用不到的资源。可以做较重量级的工作，如对注册广播的解注册，对一些状态数据的存储。此时Activity还不会被销毁掉，而是保持在内存中，但随时都会被回收。通常发生在启动另一个Activity或切换到后台时")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.e(TAG, "onDestroy ->")
        Log.e(TAG, "Activity即将被销毁。此时必须主动释放掉所有占用的资源。")
    }

    override fun onRestart() {
        super.onRestart()
        Log.e(TAG, "onRestart ->")
        Log.e(TAG, "这个方法在 Activity 由停止状态变为运行状态之前调用，也就是 Activity 被重新启动了（APP切到后台会进入onStop(), 再切换到前台时会触发onRestart()方法）")
    }

}